HBase RIT问题处理 您所在的位置:网站首页 hbase offline regions HBase RIT问题处理

HBase RIT问题处理

#HBase RIT问题处理| 来源: 网络整理| 查看: 265

问题:

最近发现HBase集群出现1W+ 的region处于RIT状态,导致很多hbase集群处于不可用状态。

HBase版本:

2.0.1

问题定位:

1、刚开始以为只是单纯超时等导致的RIT,于是通过脚本手动修改meta表状态(ING->CLOSED),再滚动重启hbase regionserver和master服务,最后批量assign,结果发现RIT情况并没有解决。(没有hbck工具,只能手动搞)

2、手动assign ‘region’提示超时。大量的assign操作的procedure处于awaiting状态。手动强制停止procedure也是无效(abort_procedure)。于是感觉事情并没有那么简单。

3、在procedure页面找到procedure的进程号,在master日志中搜索,查找procedure操作为什么卡住。最终发现提示找不到这个region的描述文件。再到hdfs上一看,整个表的目录都没了,自然就无法上线region了(业务删表时只删除了HDFS表目录导致!!!)。

解决方案:

那问题找到了,解决就很简单了:直接把hbase:meta中记录的元数据信息全部删掉就可以了。但是在实际操作时发现很难搞:表太多了,没法批量删(后期统计共将近2000个表,1W+的region,且这部分表表名为前缀+时间戳,无法提供具体表名)。

基于上述问题,只能写个脚本获取下全部的表名啦。具体脚本如下:

1、获取所有RIT的表行键 echo "scan 'hbase:meta',{COLUMNS=>'info:state'}" | hbase shell -n | grep -E 'ING|OFFLINE|CLOSED|OPEN' > meta.txt 2、通过meta.txt获取 命名空间:表名 cat meta.txt | awk -F "," '{print $1}' > table_name_and_namespace.txt 3、通过脚本获取表名 sh get_table_name.sh > meta_table_name_tmp.txt -------------------------------------------------- #!/bin/bash #这里主要处理wz命名空间下的表(客户的表都是wz空间下的) cat table_name.txt | while read line do #echo $line res1=`echo $line | awk -F ":" '{print $1}'` res2=`echo $line | awk -F ":" '{print $2}'` if [ "$res1" == "wz" ];then echo $res2 fi done -------------------------------------------------- 4、表名去重 uniq meta_table_name_tmp.txt > meta_table_name.txt 5、获取hdfs指定路径下所有表名(/apps/hbase/data/data/wz中的wz使用实际的命令空间),这里7和8根据实际情况变化,/opt/ceshi/hdfs_table_name.txt权限为777; hdfs dfs -ls /apps/hbase/data/data/wz | awk '{print $8}' | awk -F "/" '{print $7}' > /opt/ceshi/hdfs_table_name.txt 6、两边对比,找出被删除的表名 sh diff.sh -------------------------------------------------- #!/bin/bash cat meta_table_name.txt | while read line do flag=`grep -c $line hdfs_table_name.txt` if [ $flag -eq 0 ];then echo $line fi done -------------------------------------------------- 7、随机挑几张表验证下,结果是否正确,看是否确实在hdfs端被删除

知道表名后,就可以通过scan元数据表,获取所有需要删除的行键,再通过deleteall命令删除脏数据啦。

1、获取行键 echo " scan 'hbase:meta'" | hbase shell -n | grep -E 'table:state|info:state' | grep -E ' table_name1,|table_name2,|…|..| table_nameN,' > zangshuju.txt 2、删除脏数据 for line in `cat zangshuju.txt |awk '{print $1}'`;do echo " deleteall 'hbase:meta',\"$line\" ";done | hbase shell -n

最后,停止2个hbase master服务,再启动。就可以看到RIT完全消失啦。

总结:

很明显,本次RIT问题产生的原因是使用方式不规范导致,后期需要将删表逻辑改为disable+drop(推荐)。或者删除HDFS表数据的时候,顺带把元数据也删除了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有